#include "RpcProvider.hpp"
#include "RpcReadConfFile.hpp"
#include <iostream>
#include <functional>

std::string ProjectName = "RPC Network Communication Framework";

void RpcProvider::OnConnection(const muduo::net::TcpConnectionPtr&)
{

}

void RpcProvider::OnMessage(const muduo::net::TcpConnectionPtr&,
                            muduo::net::Buffer*,
                            muduo::Timestamp)
{

}

bool RpcProvider::NotifyService(::google::protobuf::Service* serivce)
{
     std::cout << "exectu NotifyService" << std::endl;
     return true;
}

//即启动muduo网络库,初始化moduo网络库,写好对应的回调函数
void RpcProvider::start()
{
     //填充TcpServer以启动服务
     RpcReadConfFile _rpcRead;

    
     std::string serverIp = _rpcRead.GetConfMapMessage("serverip"); 
     std::string stringServerPort = _rpcRead.GetConfMapMessage("serverport");

     std::cout << "IP:" << serverIp << " " << "port:" << stringServerPort << std::endl;

     if(serverIp == "" || stringServerPort == "")
     std::cout << "error: not found ConfMessage of Server" << std::endl;



     uint16_t port = atoi(stringServerPort.c_str());

     muduo::net::InetAddress listenAddr(serverIp,port);
     muduo::net::TcpServer tcpServer(&_eventloop,listenAddr,ProjectName);

     //注册回调函数，设置线程数

     //由于这里我们要设置一个类内的回调函数，类内的函数调用是需要对象的，只传入函数名是不行的，我们之间使用bind绑定器
     tcpServer.setConnectionCallback(std::bind(&RpcProvider::OnConnection,this,std::placeholders::_1));
     tcpServer.setMessageCallback(std::bind(&RpcProvider::OnMessage,this,
     std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));

     tcpServer.setThreadNum(4);

     // 开始监听并启动loop循环
     tcpServer.start();
     _eventloop.loop();

     //注意 ：以上代码更不就不需要什么什么异常判断路径，因为muduo网络库里很好的实现的对应的log日志
}